package com.surface.hao.util;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 日期工具类
 * @author songhao
 * @CreateDate 2019-12-30
 */
public class DateUtils {

	/**
	 * 日期格式：yyyy-MM-dd HH:mm:ss
	 */
	public static final String YMD_HMS_FORMAT = "yyyy-MM-dd HH:mm:ss";

	/**
	 * 获取日期的指定格式,如果date为空就取当前时间
	 *
	 * @param format
	 * @param date
	 * @return
	 */
	public static String getValueByDate(Date date, String format) {
		if (date == null) {
			date = new Date();
		}
		DateFormat dateFormat = new SimpleDateFormat(format);
		String value = dateFormat.format(date);
		return value;
	}

	/**
	 * 根据时间戳获取日期
	 *
	 * @param value
	 * @param format
	 * @return
	 */
	public static String getValueByTime(Long value, String format) {
		Date date = new Date(value);
		return getValueByDate(date, format);
	}

	/**
	 * 获取对应时间的毫秒，注意格式必须与值的格式是对应的
	 *
	 * @param format 格式是"yyyy-MM-dd"
	 * @param value  值是"2018-01-29"
	 * @return
	 */
	public static long getMillisecondsByValue(String value, String format) throws Exception {
		if (format == null || value == null) {
			throw new Exception("格式和值都不允许为空!");
		}
		if (format.length() != value.length()) {
			throw new Exception("格式和值不对应!");
		}
		Date date = getDateByValue(value, format);
		return date.getTime();
	}

	/**
	 * 根据日期字符串和格式转换成Date对象
	 *
	 * @param dateValue
	 * @param format
	 * @return
	 */
	public static Date getDateByValue(String dateValue, String format) throws Exception {
		DateFormat df = new SimpleDateFormat(format);
		return df.parse(dateValue);
	}

	/**
	 * 获取当前日期的格式化时间
	 * @return
	 */
	public static String getFormatDate() {
		Date date = new Date();
		DateFormat df = new SimpleDateFormat(YMD_HMS_FORMAT);
		return df.format(date);
	}
}
